package com.hy.video.monitor.security.userdetails;

import com.hy.video.monitor.repository.UserRepo;
import lombok.RequiredArgsConstructor;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;

/**
 * @program: ca
 * @description TODO SpringSecurity 通过数据库校验用户名和密码
 * TODO UserDetailsService 就是调取用户信息的服务，数据库这块呢，
 * TODO 就是把用户信息从数据库里面提取出来，形成一个UserDetails。
 * TODO 业务类实现UserDetailServive,实现loadUserByUsername方法，
 * TODO 从数据库重查询用户信息再形成一个UserDetails对象。
 * @author: 张三少
 * @create: 2022-04-20 10:04
 **/
@RequiredArgsConstructor
@Service
public class UserDetailsServiceImpl implements UserDetailsService {

    private final UserRepo userRepo;

//    @Override
//    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
//        // JPA采用的是自然语言写法，已经封装了通用的sql， “Optional” 表示查询结果可能为空
//        return userRepo.findOptionalByUsername(username)
//            // orElseThrow 处理查询结果为空情况
//            .orElseThrow(() -> new UsernameNotFoundException("未找到用户名为：" + username + "用户"));
//    }
    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        return userRepo.findOptionalByUsername(username).orElseThrow(() -> new UsernameNotFoundException("Cannot find username"));
    }
}
